home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Interactive Reference Guide
/
C-C++ Interactive Reference Guide.iso
/
c_ref
/
csource1
/
cenvid
/
sortlen.bat
< prev
next >
Wrap
DOS Batch File
|
1993-05-18
|
3KB
|
73 lines
@echo off
REM ********************************************************************
REM *** SortLen.bat - CEnvi batch file to sort a file by line length ***
REM *** with the shorter lines preceding longer lines. ***
REM *** This is an example of the C standard library's ***
REM *** qsort routine. ***
REM ********************************************************************
REM ******************************************************************
REM *** Check that only one item was input, and that it was a file ***
REM *** name. Else display usage screen. ***
REM ******************************************************************
if "%1" == "" GOTO INSTRUCTIONS
if not "%2" == "" GOTO INSTRUCTIONS
if not exist %1 GOTO INSTRUCTIONS
REM **********************************************************************
REM *** Transfer control to the CEnvi code, which will input all lines ***
REM *** into an array, sort the array, and then print the sorted array ***
REM **********************************************************************
cenvi %0.bat < %1
GOTO CENVI_EXIT
/*************************************************************************
*** Build array of all lines in the source file, which was redirected ***
*** to standard input in the "cenvid %0.bat < %1" line above. ***
*************************************************************************/
LineCount = 0;
while ( NULL != (text[LineCount] = gets()) ) {
LineCount++;
}
if ( 0 == LineCount ) {
printf("No data to sort.\a\n");
exit(EXIT_FAILURE);
}
/******************************************
*** Sort the data based on line length ***
******************************************/
qsort(text,LineCount,"LengthCompare");
LengthCompare(line1,line2) {
// This routine is called by the qsort() library routine to compare
// two lines. Return < 0 if line1 is shorter than line 2, 0 if line1
// is the same length as line 2, and > 0 if line1 is longer than line2
return( strlen(line1) - strlen(line2) );
}
/*******************************
*** Display the sorted text ***
*******************************/
for ( i = 0; i < LineCount; i++ )
puts(text[i])
return(EXIT_SUCCESS);
:CENVI_EXIT
REM *************************************
REM *** CEnvi is complete. Clean up. ***
REM *************************************
GOTO FINISHED
:INSTRUCTIONS
ECHO .
ECHO SortLen.bat - Sort file by line length.
ECHO USAGE: SortLen.bat FileSpec
GOTO FINISHED
:FINISHED